///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/**
*	Contains code for random generators.
*	\file		LaborRandom.h
*	\author		Pierre Terdiman
*	\date		August, 9, 2001
*/
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Guard
#ifndef __LABORRANDOM_H__
#define __LABORRANDOM_H__
#include "../LaborCoreDef.h"
NAMESPACE_LABOR3D_BEGIN
void	sRand(unsigned int seed);
unsigned int	Rand();

//! Returns a unit random floating-point value
inline float unitRandomFloat()	{ return float(Rand()) * ONE_OVER_RAND_MAX;	}

inline float rangeRandom(float fLow, float fHigh) { return (fHigh-fLow)*unitRandomFloat() + fLow; }
//! Returns a random index so that 0<= index < max_index
unsigned int getRandomIndex(unsigned int max_index);

class  LABORCORE_API CLBasicRandom
{
public:

	//! Constructor
	inline				CLBasicRandom(unsigned int seed=0)	: mRnd(seed)	{}
	//! Destructor
	inline				~CLBasicRandom()								{}

	inline	void		getSeed(unsigned int seed)			{ mRnd = seed;											}
	inline	unsigned int		getCurrentValue()	const	{ return mRnd;											}
	inline	unsigned int		randomize()					{ mRnd = mRnd * 2147001325 + 715136305; return mRnd;	}
	//! 
private:
	unsigned int		mRnd;
};

NAMESPACE_LABOR3D_END

#endif // __LABORRANDOM_H__

